home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Utilities / SmartFilesystem / Sources / SetCache / setcache.c
Encoding:
C/C++ Source or Header  |  1998-07-12  |  1.6 KB  |  68 lines

  1. #include <dos/dos.h>
  2. #include <dos/dosextens.h>
  3. #include <proto/dos.h>
  4. #include <proto/exec.h>
  5.  
  6. #define ACTION_SET_CACHE   (15777217)
  7.  
  8. LONG main() {
  9.   struct RDArgs *readarg;
  10.   UBYTE template[]="DEVICE/A,LINES/A/N,READAHEAD/A/N,NOCOPYBACK/S\n";
  11.  
  12.   struct {char *name;
  13.           ULONG *lines;
  14.           ULONG *readahead;
  15.           ULONG nocopyback;} arglist={NULL};
  16.  
  17.   if((DOSBase=(struct DosLibrary *)OpenLibrary("dos.library",37))!=0) {
  18.     if((readarg=ReadArgs(template,(LONG *)&arglist,0))!=0) {
  19.       struct MsgPort *msgport;
  20.       struct DosList *dl;
  21.       UBYTE *devname=arglist.name;
  22.  
  23.       while(*devname!=0) {
  24.         if(*devname==':') {
  25.           *devname=0;
  26.           break;
  27.         }
  28.         devname++;
  29.       }
  30.  
  31.       dl=LockDosList(LDF_DEVICES|LDF_READ);
  32.       if((dl=FindDosEntry(dl,arglist.name,LDF_DEVICES))!=0) {
  33.         ULONG copyback=1;
  34.         LONG errorcode;
  35.  
  36.         if(arglist.nocopyback!=0) {
  37.           copyback=0;
  38.         }
  39.  
  40.         msgport=dl->dol_Task;
  41.         UnLockDosList(LDF_DEVICES|LDF_READ);
  42.  
  43.         if((errorcode=DoPkt(msgport,ACTION_SET_CACHE,*arglist.lines,*arglist.readahead,copyback,0,0))==DOSFALSE) {
  44.           PrintFault(IoErr(),"error while setting new cache size");
  45.         }
  46.         else {
  47.           LONG bytes;
  48.  
  49.           bytes=IoErr();
  50.  
  51.           VPrintf("New cache size set.  Allocated %ld bytes of memory.\n",&bytes);
  52.         }
  53.       }
  54.       else {
  55.         VPrintf("Couldn't find device '%s:'.\n",&arglist.name);
  56.         UnLockDosList(LDF_DEVICES|LDF_READ);
  57.       }
  58.  
  59.       FreeArgs(readarg);
  60.     }
  61.     else {
  62.       PutStr("Wrong arguments!\n");
  63.     }
  64.     CloseLibrary((struct Library *)DOSBase);
  65.   }
  66.   return(0);
  67. }
  68.